package com.tanhua.sso.service;

import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.tanhua.common.enums.SexEnum;
import com.tanhua.common.mapper.UserInfoMapper;
import com.tanhua.common.pojo.User;
import com.tanhua.common.pojo.UserInfo;
import com.tanhua.common.service.PicUploadService;
import com.tanhua.common.vo.PicUploadResult;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.web.multipart.MultipartFile;

import java.io.IOException;
import java.util.Map;

@Service
@Slf4j
public class UserInfoService {

    @Autowired
    private UserService userService;

    @Autowired
    private UserInfoMapper userInfoMapper;

    @Autowired
    private FaceEngineService faceEngineService;

    @Autowired
    private PicUploadService picUploadService;

    /**
     * 校验token和存储信息
     * @param param
     * @param token
     * @return
     */
    public Boolean loginReginfo(Map<String, String> param, String token) {
        //校验token，返回一个user对象
        User user = userService.queryUserByToken(token);

        //返回的user是null，就表示token校验失败
        if (user == null){
            return false;
        }

        //查询一下是否已有这个用户的记录
        QueryWrapper<UserInfo> wrapper = new QueryWrapper<>();
        wrapper.eq("user_id",user.getId());
        int count = userInfoMapper.selectCount(wrapper);


        //决定是要添加还是修改
        boolean flag = false;

        //如果查询出来的结果是0，就表示mysql中没有这个用户信息
        if (count == 0 ){
            flag = true;
        }

        //创建一个userInfo对象，封装用户信息
        UserInfo userInfo = new UserInfo();
        //获得id
        userInfo.setUserId(user.getId());
        //equalsIgnoreCase(CharSequence str1, CharSequence str2) -> 判断str1是不是和str2相同
        userInfo.setSex(StringUtils.equalsIgnoreCase(param.get("gender"),"man")? SexEnum.MAN:SexEnum.WOMAN);
        userInfo.setNickName(param.get("nickname"));
        userInfo.setBirthday(param.get("birthday"));
        userInfo.setCity(param.get("city"));

        //true：mysql中没有。就执行insert方法
        if (flag){
            return userInfoMapper.insert(userInfo) == 1;
        }

        //false：mysql中已经有了，就执行update方法
        QueryWrapper<UserInfo> updatWrapper = new QueryWrapper<>();
        updatWrapper.eq("user_id",user.getId());

        //如果mysql中有多条相同的用户信息，就是user_id重复的，那么就不会返回1，（这个问题还是没有得到解决）
        return userInfoMapper.update(userInfo,updatWrapper) == 1;
    }

    /**
     * 用户头像保存
     * @param multipartFile
     * @param token
     * @return
     */
    public boolean saveUserLogo(MultipartFile multipartFile, String token) {
        User user = userService.queryUserByToken(token);
        if (user == null){
            return false;
        }

        //校验人像
        try {
            boolean b = faceEngineService.checkIsPortrait(multipartFile.getBytes());
            if (!b){
                log.error("用户头像非人像");
                return false;
            }
        } catch (IOException e) {
            log.error("校验人像出错",e);
            e.printStackTrace();
        }

        //将图片上传到阿里云OSS
        PicUploadResult upload = picUploadService.upload(multipartFile);
        //图片的url地址为空的话，表示保存失败
        if (StringUtils.isEmpty(upload.getName())){
            log.error("OSS图片保存失败");
            return false;
        }
        //头像保存成功，将图片的url地址保存到mysql中
        UserInfo userInfo = new UserInfo();
        userInfo.setLogo(upload.getName());

        QueryWrapper<UserInfo> wrapper = new QueryWrapper<>();
        wrapper.eq("user_id",user.getId());
        return  userInfoMapper.update(userInfo,wrapper) == 1;
    }
}
